package a.f.j;

import a.c.bb;
import a.c.d;
import a.c.e;
import a.c.m;
import a.c.q;
import a.c.v;
import a.c.w;
import a.c.x;
import a.c.z;

import java.util.ArrayList;

public class cb
  extends ab
{
  public static final int h = 1;
  public static final int i = 0;
  private a.c.n j;
  private a.c.n k;
  private a.c.ab l;
  private x m;
  private ArrayList n;
  private static final int o = 0;
  private static final int p = 1;
  private static final int q = 2;
  public static boolean r;
  
  public cb(q paramq)
  {
    super(paramq);
    this.m = paramq.B();
    this.j = paramq.C();
    this.k = paramq.C();
    this.n = new ArrayList();
    this.l = new a.c.ab();
    do
    {
      m localm = paramq.w();
      while (i1 == 0)
      {
        if (!localm.e()) {
          break;
        }
        p(localm.a()).b(true);
        localm.f();
      }
    } while (bool);
  }
  
  public void i()
  {
    super.i();
    this.a.a(this.j);
    this.a.a(this.k);
    this.a.a(this.m);
    this.l.clear();
  }
  
  public void a(e parame, int paramInt)
  {
    i(parame).a(paramInt);
  }
  
  public int a(e parame)
  {
    return i(parame).a();
  }
  
  public boolean b(e parame)
  {
    if (!ab.g) {}
    return a(parame) == 1;
  }
  
  public void c(e parame)
  {
    a(parame, 1);
  }
  
  public void d(e parame)
  {
    a(parame, 2);
  }
  
  public boolean e(e parame)
  {
    if (!ab.g) {}
    return a(parame) == 2;
  }
  
  public boolean f(e parame)
  {
    if (!ab.g) {}
    return a(parame) == 0;
  }
  
  public void g(e parame)
  {
    a(parame, 0);
  }
  
  public int n()
  {
    boolean bool = ab.g;
    int i2 = ab.f;
    int i1 = 0;
    do
    {
      w localw = this.a.v();
      while (i2 == 0)
      {
        if (!localw.e()) {
          break;
        }
        if (i2 != 0) {
          break label64;
        }
        if (b(localw.d())) {
          i1++;
        }
        localw.f();
      }
    } while (bool);
    label64:
    return i1;
  }
  
  public n[] a(n paramn, d paramd)
  {
    n[] arrayOfn = a(paramn, paramd, null, null);
    return arrayOfn;
  }
  
  public n[] a(n paramn, d paramd1, d paramd2, d paramd3)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    if (!bool) {
      if ((paramd2 != null) && (c(paramd2) != paramn)) {
        throw new RuntimeException("Fatal Error in edge to face assignment!");
      }
    }
    if (paramd3 != null)
    {
      if (bool) {
        break label70;
      }
      if (c(paramd3) != paramn) {
        throw new RuntimeException("Fatal Error in edge to face assignment!");
      }
    }
    label70:
    if (!bool) {
      if (e(paramd1.e())) {
        c(paramd1.e());
      }
    }
    if (!bool) {
      if (e(paramd1.f())) {
        c(paramd1.f());
      }
    }
    this.b.remove(paramn);
    m localm = paramn.a();
    if (!bool) {
      if (paramd2 == null)
      {
        if (localm.e()) {}
        while (bool)
        {
          if (i1 != 0) {
            break label236;
          }
          if (localm.a().f() != paramd1.e())
          {
            localm.b();
            if (i1 == 0) {
              break;
            }
          }
        }
        paramd2 = localm.a();
      }
    }
    if (!bool) {
      if (paramd3 == null)
      {
        label236:
        do
        {
          do
          {
            if (!localm.e()) {
              break;
            }
            if (i1 != 0) {
              break label263;
            }
            if (localm.a().f() == paramd1.f()) {
              break;
            }
            localm.b();
          } while (i1 == 0);
        } while (bool);
        label263:
        paramd3 = localm.a();
      }
    }
    d locald1 = a(paramd1);
    n[] arrayOfn1 = new n[2];
    n localn1 = new n();
    n localn2 = new n();
    if (!bool) {
      if (paramd2.f() == paramd1.f())
      {
        locald2 = paramd1;
        locald3 = locald1;
        if (bool) {
          break label358;
        }
        if (i1 == 0) {
          break label336;
        }
      }
    }
    d locald2 = locald1;
    d locald3 = paramd1;
    label336:
    p(locald2).a(localn1);
    p(locald3).a(localn2);
    label358:
    localm.h();
    do
    {
      do
      {
        if (!localm.e()) {
          break;
        }
        if (i1 != 0) {
          break label553;
        }
        if (localm.a() == paramd2) {
          break;
        }
        localm.b();
      } while (i1 == 0);
    } while (bool);
    localm.b();
    do
    {
      do
      {
        if (!localm.e()) {
          break;
        }
        if (i1 != 0) {
          break label553;
        }
        if (localm.a() == paramd3) {
          break;
        }
        p(localm.a()).a(localn1);
        localn1.a(localm.a());
        localm.b();
      } while (i1 == 0);
      p(paramd3).a(localn1);
      localn1.a(paramd3);
      localn1.a(locald2);
      this.b.add(localn1);
      arrayOfn1[0] = localn1;
    } while (bool);
    localm.b();
    if ((localm.e()) && (localm.a() != paramd2)) {
      label553:
      p(localm.a()).a(localn2);
    }
    do
    {
      localn2.a(localm.a());
      localm.b();
      if (i1 == 0) {
        break;
      }
      p(paramd2).a(localn2);
      localn2.a(paramd2);
      localn2.a(locald3);
      this.b.add(localn2);
      arrayOfn1[1] = localn2;
      if (bool) {
        break label683;
      }
    } while (bool);
    if (c() == paramn) {
      a(a(localn1, localn2));
    }
    this.a.a(locald2, b(paramd3), null, 0, 1);
    label683:
    this.a.a(locald3, b(paramd2), null, 0, 1);
    n[] arrayOfn2 = new n[1];
    arrayOfn2[0] = paramn;
    n[] arrayOfn3 = new n[2];
    arrayOfn3[0] = localn1;
    arrayOfn3[1] = localn2;
    if (!bool) {
      if (p(paramd1).c())
      {
        v localv = this.l.d(paramd1);
        if (bool) {
          break label783;
        }
        if (localv != null) {
          this.l.h(localv);
        }
      }
    }
    a(paramd1, arrayOfn2, arrayOfn3);
    label783:
    if ((bool) || (q.n)) {
      ab.f = ++i1;
    }
    return arrayOfn1;
  }
  
  private static n a(n paramn1, n paramn2)
  {
    if (!ab.g) {}
    n localn = paramn1.a().k() > paramn2.a().k() ? paramn1 : paramn2;
    return localn;
  }
  
  public void b(d paramd1, d paramd2)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    if (((bool) || (paramd1 == null)) && (paramd2.e().c() > 2))
    {
      localObject1 = null;
      localObject2 = paramd2.e().n();
      do
      {
        if (!((m)localObject2).e()) {
          break;
        }
        localObject3 = ((m)localObject2).a();
        if (i1 != 0) {
          break label140;
        }
        if ((bool) || (paramd2 != localObject3))
        {
          if ((bool) || (localObject1 == null)) {
            localObject1 = localObject3;
          }
          if (bool) {
            continue;
          }
          if (c((d)localObject3).a().k() == 1) {
            localObject1 = localObject3;
          }
        }
        ((m)localObject2).f();
      } while (i1 == 0);
      if (!bool) {
        b((d)localObject1, paramd2);
      }
      label140:
      return;
    }
    Object localObject1 = new n();
    Object localObject2 = a(paramd2);
    if (!bool)
    {
      ((n)localObject1).a((d)localObject2);
      this.b.add(localObject1);
      p((d)localObject2).a((n)localObject1);
      if (paramd1 != null)
      {
        localObject3 = c(paramd1);
        ((n)localObject3).a(paramd1, paramd2, paramd1);
        p(paramd2).a((n)localObject3);
        arrayOfn1 = new n[1];
        arrayOfn1[0] = localObject3;
        arrayOfn2 = new n[2];
        arrayOfn2[0] = localObject1;
        arrayOfn2[1] = localObject3;
        a(paramd2, arrayOfn1, arrayOfn2);
        if (bool) {
          break label305;
        }
        if (i1 == 0) {
          return;
        }
      }
    }
    Object localObject3 = new n();
    this.b.add(localObject3);
    p(paramd2).a((n)localObject3);
    ((n)localObject3).a(paramd2);
    n[] arrayOfn1 = new n[0];
    label305:
    n[] arrayOfn2 = new n[2];
    arrayOfn2[0] = localObject1;
    arrayOfn2[1] = localObject3;
    a(paramd2, arrayOfn1, arrayOfn2);
  }
  
  public n a(d paramd1, d paramd2, d paramd3)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    n localn1 = new n();
    n localn2 = null;
    n localn3 = null;
    m localm1 = null;
    m localm2 = null;
    e locale1 = paramd1.e();
    e locale2 = paramd1.f();
    d locald2 = a(paramd1);
    d locald3;
    d locald1;
    if (!bool)
    {
      if (paramd2 == null)
      {
        if (!bool) {
          if (locale1.c() == 2)
          {
            localn1.a(locald2);
            p(locald2).a(localn1);
            localn1.a(paramd1);
            p(paramd1).a(localn1);
            if (!bool) {
              if (i1 == 0) {
                break label586;
              }
            }
          }
          else
          {
            localn1.a(locald2);
            p(locald2).a(localn1);
          }
        }
        locald3 = locale1.h();
        if (locald3 == paramd1) {
          throw new RuntimeException("Bridge Face failed !");
        }
        localn2 = c(locald3);
        this.b.remove(localn2);
        localm1 = localn2.a();
        do
        {
          do
          {
            if (!localm1.e()) {
              break;
            }
            if (i1 != 0) {
              break label615;
            }
            if (localm1.a() == locald3) {
              break;
            }
            localm1.b();
          } while (i1 == 0);
          locald1 = localm1.a();
          localn1.a(locald1);
          p(locald1).a(localn1);
        } while (bool);
        localm1.b();
        do
        {
          if (!localm1.e()) {
            break;
          }
          if (i1 != 0) {
            break label615;
          }
          if (localm1.a() == locald1) {
            break;
          }
          localn1.a(localm1.a());
          p(localm1.a()).a(localn1);
          localm1.b();
        } while (i1 == 0);
        localn1.a(paramd1);
        p(paramd1).a(localn1);
        if (!bool)
        {
          if (bool) {
            break label634;
          }
          if (c() != localn2) {}
        }
        else
        {
          a(localn1);
        }
      }
      else
      {
        localn1.a(locald2);
        p(locald2).a(localn1);
      }
    }
    else
    {
      localn2 = c(paramd2);
      this.b.remove(localn2);
      localm1 = localn2.a();
      do
      {
        do
        {
          if (!localm1.e()) {
            break;
          }
          if (i1 != 0) {
            break label487;
          }
          if (localm1.a() == paramd2) {
            break;
          }
          localm1.b();
        } while (i1 == 0);
      } while (bool);
      localm1.b();
      label487:
      do
      {
        if (!localm1.e()) {
          break;
        }
        if (i1 != 0) {
          break label587;
        }
        if (localm1.a() == paramd2) {
          break;
        }
        localObject = localm1.a();
        localn1.a((d)localObject);
        p((d)localObject).a(localn1);
        localm1.b();
      } while (i1 == 0);
      localn1.a(paramd2);
      p(paramd2).a(localn1);
      localn1.a(paramd1);
      p(paramd1).a(localn1);
      if (!bool)
      {
        if (bool) {
          break label831;
        }
        if (c() != localn2) {}
      }
      else
      {
        a(localn1);
      }
    }
    label586:
    if (paramd3 == null)
    {
      label587:
      if ((bool) || (locale2.c() != 2))
      {
        locald3 = locale2.h();
        if (locald3 == locald2) {
          label615:
          throw new RuntimeException("Error in bridge Face !");
        }
        label634:
        localn3 = c(locald3);
        this.b.remove(localn3);
        localm2 = localn3.a();
        do
        {
          do
          {
            if (!localm2.e()) {
              break;
            }
            if (i1 != 0) {
              break label704;
            }
            if (localm2.a() == locald3) {
              break;
            }
            localm2.b();
          } while (i1 == 0);
        } while (bool);
        locald1 = localm2.a();
        localn1.a(locald1);
        p(locald1).a(localn1);
        localm2.b();
        if (localm2.e())
        {
          if (i1 != 0) {
            break label1017;
          }
          if (localm2.a() == locald1) {}
        }
        while (bool)
        {
          localn1.a(localm2.a());
          p(localm2.a()).a(localn1);
          localm2.b();
          if (i1 == 0) {
            break;
          }
        }
        if (bool) {
          break label1007;
        }
        if (c() == localn3) {
          a(localn1);
        }
      }
    }
    else
    {
      localn3 = c(paramd3);
      this.b.remove(localn3);
      localm2 = localn3.a();
      do
      {
        do
        {
          if (!localm2.e()) {
            break;
          }
          if (i1 != 0) {
            break label923;
          }
          if (localm2.a() == paramd3) {
            break;
          }
          localm2.b();
        } while (i1 == 0);
      } while (bool);
      localm2.b();
      do
      {
        if (!localm2.e()) {
          break;
        }
        if (i1 != 0) {
          break label1017;
        }
        if (localm2.a() == paramd3) {
          break;
        }
        localObject = localm2.a();
        localn1.a((d)localObject);
        p((d)localObject).a(localn1);
        localm2.b();
      } while (i1 == 0);
      localn1.a(paramd3);
      if (bool) {
        break label1041;
      }
      p(paramd3).a(localn1);
    }
    label704:
    this.b.add(localn1);
    label831:
    if ((bool) || (c() == localn3)) {
      label1007:
      a(localn1);
    }
    label923:
    if (paramd2 != null) {
      label1017:
      this.a.a(paramd1, b(paramd2), null, 0, 1);
    }
    if (paramd3 != null) {
      label1041:
      this.a.a(b(paramd1), b(paramd3), null, 0, 1);
    }
    Object localObject = new n[1];
    localObject[0] = localn1;
    ArrayList localArrayList = new ArrayList(2);
    if (!bool) {
      if (localn2 != null) {
        localArrayList.add(localn2);
      }
    }
    if (localn3 != null) {
      localArrayList.add(localn3);
    }
    n[] arrayOfn = new n[localArrayList.size()];
    localArrayList.toArray(arrayOfn);
    if (!bool) {
      if (p(paramd1).c())
      {
        v localv = this.l.d(paramd1);
        if (bool) {
          break label1186;
        }
        if (localv != null) {
          this.l.h(localv);
        }
      }
    }
    a(paramd1, arrayOfn, (n[])localObject);
    label1186:
    return localn1;
  }
  
  public n j(d paramd)
  {
    n localn = a(paramd, null, null);
    return localn;
  }
  
  public void k(d paramd)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    d locald1 = b(paramd);
    if (!bool) {
      if (c(paramd) != c(locald1))
      {
        localn1 = c(paramd);
        localn2 = c(locald1);
        localn3 = new n();
        arrayOfn1 = new n[2];
        arrayOfn2 = new n[1];
        arrayOfn1[0] = localn1;
        arrayOfn1[1] = localn2;
        arrayOfn2[0] = localn3;
        localm1 = localn1.a();
        m localm2 = localn2.a();
        this.b.remove(localn1);
        this.b.remove(localn2);
        label221:
        label223:
        do
        {
          do
          {
            if (!localm1.e()) {
              break;
            }
            d locald2 = localm1.a();
            if (i1 != 0) {
              break label324;
            }
            if (!bool) {
              if (locald2 != paramd)
              {
                localn3.a(locald2);
                p(locald2).a(localn3);
                if (i1 == 0) {
                  break label282;
                }
              }
            }
            do
            {
              do
              {
                if (localm2.a() == locald1) {
                  break;
                }
                if (bool) {
                  break label223;
                }
                localm2.b();
                if (i1 != 0) {
                  break label221;
                }
              } while (i1 == 0);
            } while (bool);
            localm2.b();
            while (bool) {
              do
              {
                if (localm2.a() == locald1) {
                  break;
                }
                localn3.a(localm2.a());
                p(localm2.a()).a(localn3);
                localm2.b();
                if (bool) {
                  break label296;
                }
                if (i1 != 0) {
                  break label294;
                }
              } while (i1 == 0);
            }
            localm1.f();
          } while (i1 == 0);
          q(paramd);
          q(locald1);
        } while (bool);
        label282:
        label294:
        label296:
        this.b.add(localn3);
        label324:
        if ((!bool) && ((localn1 != c()) && (localn2 != c()))) {
          break label757;
        }
        a(localn3);
        if (bool) {
          return;
        }
        if (i1 == 0) {
          break label757;
        }
      }
    }
    n localn1 = c(paramd);
    n localn2 = new n();
    n localn3 = new n();
    n[] arrayOfn1 = new n[1];
    n[] arrayOfn2 = new n[2];
    arrayOfn2[0] = localn2;
    arrayOfn2[1] = localn3;
    arrayOfn1[0] = localn1;
    this.b.remove(localn1);
    m localm1 = localn1.a();
    do
    {
      do
      {
        if (localm1.a() == paramd) {
          break;
        }
        if (bool) {
          break label480;
        }
        localm1.b();
        if (i1 != 0) {
          break label478;
        }
      } while (i1 == 0);
    } while (bool);
    localm1.b();
    label478:
    label480:
    do
    {
      do
      {
        if (localm1.a() == locald1) {
          break;
        }
        localn2.a(localm1.a());
        p(localm1.a()).a(localn2);
        if (bool) {
          break label553;
        }
        localm1.b();
        if (i1 != 0) {
          break label551;
        }
      } while (i1 == 0);
    } while (bool);
    localm1.b();
    label551:
    label553:
    if (localm1.a() != paramd)
    {
      localn3.a(localm1.a());
      p(localm1.a()).a(localn3);
      localm1.b();
    }
    for (;;)
    {
      if (!bool) {
        if (i1 == 0)
        {
          if (i1 == 0) {
            break;
          }
          if (bool) {
            continue;
          }
          if (bool) {
            break label670;
          }
          if (localn2.a().k() > 0)
          {
            if (localn1 == c()) {
              a(localn2);
            }
            this.b.add(localn2);
          }
        }
      }
    }
    label670:
    if (!bool) {
      if (localn3.a().k() > 0)
      {
        if (localn1 == c()) {
          a(localn3);
        }
        this.b.add(localn3);
      }
    }
    if ((bool) || ((localn2.a().k() == 0) && (localn3.a().k() == 0))) {
      a(b().a());
    }
    q(paramd);
    q(locald1);
    label757:
    b(paramd, arrayOfn1, arrayOfn2);
  }
  
  public void a(d paramd, e parame, n paramn)
  {
    boolean bool = ab.g;
    d locald = a(paramd);
    if (!bool)
    {
      if (paramd.f().equals(parame))
      {
        paramn.a(paramd, locald);
        if (bool) {
          return;
        }
      }
    }
    else {
      if (ab.f == 0) {
        break label53;
      }
    }
    paramn.a(locald, paramd);
    label53:
    p(paramd).a(paramn);
    p(locald).a(paramn);
  }
  
  public e l(d paramd)
  {
    d locald1 = b(paramd);
    e locale1 = paramd.e();
    e locale2 = paramd.f();
    e locale3 = this.a.i();
    d(locale3);
    d locald2 = this.a.a(locale1, paramd, locale3, null, 1, 0);
    p(locald2).a(false);
    d locald3 = this.a.a(locale3, null, locale2, paramd, 0, 1);
    p(locald3).a(false);
    d locald4 = this.a.a(locale2, locald1, locale3, null, 1, 0);
    p(locald4).a(true);
    d locald5 = this.a.a(locale3, null, locale1, locald1, 0, 1);
    p(locald5).a(true);
    a.c.ab localab = new a.c.ab();
    localab.add(locald2);
    localab.add(locald3);
    a(paramd, localab, 0);
    n localn1 = c(paramd);
    n localn2 = c(locald1);
    p(locald2).a(localn1);
    p(locald3).a(localn1);
    p(locald4).a(localn2);
    p(locald5).a(localn2);
    localn1.a(paramd, locald2, locald3);
    localn2.a(locald1, locald4, locald5);
    a(locald2, locald5);
    a(locald3, locald4);
    a(paramd, localab.p());
    q(paramd);
    q(locald1);
    return locale3;
  }
  
  public a.c.ab a(d paramd, int paramInt)
  {
    boolean bool2 = ab.g;
    int i3 = ab.f;
    d locald1 = b(paramd);
    e locale1 = paramd.e();
    e locale2 = paramd.f();
    n localn1 = c(paramd);
    n localn2 = c(locald1);
    e[] arrayOfe1 = new e[paramInt];
    e[] arrayOfe2 = new e[paramInt + 2];
    boolean bool1 = h(paramd);
    arrayOfe2[0] = locale1;
    arrayOfe2[(paramInt + 1)] = locale2;
    int i1 = 0;
    do
    {
      while (i3 == 0)
      {
        if (i1 >= paramInt) {
          break;
        }
        arrayOfe1[i1] = this.a.i();
        arrayOfe2[(i1 + 1)] = arrayOfe1[i1];
        d(arrayOfe1[i1]);
        i1++;
      }
    } while (bool2);
    a.c.ab localab1 = new a.c.ab();
    a.c.ab localab2 = new a.c.ab();
    d locald2 = this.a.a(locale1, paramd, arrayOfe1[0], null, 1, 0);
    localab1.b(locald2);
    d locald3 = this.a.a(arrayOfe1[0], null, locale1, locald1, 0, 1);
    localab2.a(locald3);
    a(locald2, locald3);
    int i2 = 1;
    do
    {
      if (i2 >= paramInt) {
        break;
      }
      locald5 = this.a.a(arrayOfe2[i2], arrayOfe2[(i2 + 1)]);
      if (bool2) {
        break label324;
      }
      localObject = this.a.a(arrayOfe2[(i2 + 1)], arrayOfe2[i2]);
      localab1.b(locald5);
      localab2.a(localObject);
      if (i3 != 0) {
        break label306;
      }
      a(locald5, (d)localObject);
      i2++;
    } while (i3 == 0);
    label306:
    label324:
    d locald4 = this.a.a(arrayOfe1[(paramInt - 1)], null, locale2, paramd, 0, 1);
    localab1.b(locald4);
    d locald5 = this.a.a(locale2, locald1, arrayOfe1[(paramInt - 1)], null, 1, 0);
    localab2.a(locald5);
    if (!bool2)
    {
      a(locald4, locald5);
      if (bool1)
      {
        a(locald1, localab2, 0);
        if (bool2) {
          break label427;
        }
        if (i3 == 0) {
          break label407;
        }
      }
    }
    a(paramd, localab1, 0);
    label407:
    a(paramd, localab1.p());
    q(paramd);
    q(locald1);
    label427:
    Object localObject = localab1.l();
    d locald6;
    do
    {
      do
      {
        if (!((m)localObject).e()) {
          break;
        }
        locald6 = ((m)localObject).a();
        p(locald6).a(localn1);
        p(locald6).a(bool1);
        ((m)localObject).f();
        if (bool2) {
          break label516;
        }
        if (i3 != 0) {
          break label509;
        }
      } while (i3 == 0);
    } while (bool2);
    localObject = localab2.l();
    label509:
    do
    {
      if (!((m)localObject).e()) {
        break;
      }
      locald6 = ((m)localObject).a();
      if (!bool2)
      {
        p(locald6).a(localn2);
        if (i3 != 0) {
          break label606;
        }
      }
      if (!bool2) {}
      p(locald6).a(!bool1);
      ((m)localObject).f();
    } while (i3 == 0);
    label516:
    localn1.a(paramd, localab1);
    if (!bool2) {
      localn2.a(locald1, localab2);
    }
    label606:
    if (q.o) {
      ab.g = !bool2;
    }
    return localab1;
  }
  
  public d h(e parame)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    a.c.ab localab = new a.c.ab();
    if (!bool)
    {
      if (parame.d() == 2) {
        if (bool) {
          break label56;
        }
      }
    }
    else {
      if (parame.e() == 2) {
        break label55;
      }
    }
    throw new RuntimeException("Node is not a crossing");
    label55:
    label56:
    m localm = parame.m();
    d locald3 = localm.a();
    localm.f();
    d locald4 = localm.a();
    localm = parame.n();
    d locald1 = localm.a();
    localm.f();
    d locald2 = localm.a();
    d locald5;
    if (h(locald3))
    {
      locald5 = locald4;
      locald7 = locald3;
      if (!bool) {
        if (i1 == 0) {
          break label150;
        }
      }
    }
    else
    {
      locald5 = locald3;
    }
    d locald7 = locald4;
    label150:
    if (!bool) {
      if (locald1 == b(locald5))
      {
        locald6 = locald2;
        locald8 = locald1;
        if (bool) {
          break label184;
        }
        if (i1 == 0) {
          break label187;
        }
      }
    }
    d locald6 = locald1;
    label184:
    d locald8 = locald2;
    label187:
    d locald11 = (d)this.k.get(locald5);
    if (!bool) {
      if (locald5.e() == locald11.e())
      {
        if (bool) {
          break label276;
        }
        if (locald6.f() == locald11.f())
        {
          r(locald11);
          if (bool) {
            break label276;
          }
          locald10 = locald11;
          if (i1 == 0) {
            break label278;
          }
        }
      }
    }
    label276:
    d locald10 = this.a.a(locald5.e(), locald6.f());
    label278:
    d locald9 = a(locald10);
    if ((bool) || ((locald7.e() != locald9.e()) || (locald8.f() != locald9.f()))) {
      throw new RuntimeException("Reverse Edge Restauration failed!");
    }
    n localn1 = c(locald5);
    localn1.c(locald5, locald6, locald10);
    p(locald10).a(localn1);
    n localn2 = c(locald7);
    localn2.c(locald7, locald8, locald9);
    p(locald9).a(localn2);
    j(parame);
    localab.a(locald6);
    localab.a(locald5);
    a(locald10, localab, 1);
    a(localab.p(), locald10);
    return locald10;
  }
  
  public void a(db paramdb)
  {
    this.n.add(paramdb);
  }
  
  public void b(db paramdb)
  {
    int i1 = this.n.indexOf(paramdb);
    if (i1 >= 0) {
      this.n.remove(i1);
    }
  }
  
  protected void a(d paramd, d[] paramArrayOfd)
  {
    int i2 = ab.f;
    int i1 = 0;
    do
    {
      if (i1 >= this.n.size()) {
        break;
      }
      db localdb = (db)this.n.get(i1);
      localdb.a(paramd, paramArrayOfd);
      i1++;
    } while (i2 == 0);
  }
  
  protected void a(d[] paramArrayOfd, d paramd)
  {
    int i2 = ab.f;
    int i1 = 0;
    do
    {
      if (i1 >= this.n.size()) {
        break;
      }
      db localdb = (db)this.n.get(i1);
      localdb.a(paramArrayOfd, paramd);
      i1++;
    } while (i2 == 0);
  }
  
  protected void a(d paramd, n[] paramArrayOfn1, n[] paramArrayOfn2)
  {
    int i2 = ab.f;
    int i1 = 0;
    do
    {
      if (i1 >= this.n.size()) {
        break;
      }
      db localdb = (db)this.n.get(i1);
      localdb.a(paramd, paramArrayOfn1, paramArrayOfn2);
      i1++;
    } while (i2 == 0);
  }
  
  protected void b(d paramd, n[] paramArrayOfn1, n[] paramArrayOfn2)
  {
    int i2 = ab.f;
    int i1 = 0;
    do
    {
      if (i1 >= this.n.size()) {
        break;
      }
      db localdb = (db)this.n.get(i1);
      localdb.b(paramd, paramArrayOfn1, paramArrayOfn2);
      i1++;
    } while (i2 == 0);
  }
  
  public m m(d paramd)
  {
    v localv = this.l.d(paramd);
    if (!ab.g) {
      if (localv == null)
      {
        localab = new a.c.ab();
        localab.add(paramd);
        return localab.l();
      }
    }
    a.c.ab localab = (a.c.ab)this.j.get(paramd);
    return localab.l();
  }
  
  public d n(d paramd)
  {
    d locald = (d)this.k.get(paramd);
    if (!ab.g) {
      if (locald == null) {
        locald = paramd;
      }
    }
    return locald;
  }
  
  public void a(d paramd, a.c.ab paramab, int paramInt)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    Object localObject1;
    Object localObject2;
    Object localObject3;
    Object localObject4;
    if (!bool) {
      if (paramInt == 0)
      {
        if (!bool) {
          if (p(paramd).c())
          {
            localObject1 = this.l.d(paramd);
            if (!bool)
            {
              if (localObject1 == null) {
                this.l.add(paramd);
              }
              this.j.a(paramd, paramab);
            }
            localObject2 = paramab.l();
            do
            {
              if (!((m)localObject2).e()) {
                break;
              }
              localObject3 = ((m)localObject2).a();
              this.k.a(localObject3, paramd);
              this.j.a(localObject3, paramab);
              ((m)localObject2).f();
            } while (i1 == 0);
          }
        }
        localObject1 = (a.c.ab)this.j.get(paramd);
        localObject2 = ((a.c.ab)localObject1).d(paramd);
        localObject3 = (d)this.k.get(((v)localObject2).c());
        localObject4 = localObject2;
        m localm = paramab.l();
        do
        {
          if (!localm.e()) {
            break;
          }
          d locald = localm.a();
          this.k.a(locald, localObject3);
          ((a.c.ab)localObject1).b(locald, (v)localObject4);
          localObject4 = ((a.c.ab)localObject1).c((v)localObject4);
          if (bool) {
            break label279;
          }
          localm.f();
          if (i1 != 0) {
            break label274;
          }
        } while (i1 == 0);
        if (!bool) {
          ((a.c.ab)localObject1).h((v)localObject2);
        }
        label274:
        label279:
        localm = ((a.c.ab)localObject1).l();
        do
        {
          if (!localm.e()) {
            break;
          }
          this.j.a(localm.a(), localObject1);
          localm.f();
        } while (i1 == 0);
      }
    }
    if (paramInt == 1)
    {
      localObject1 = paramab.l();
      this.j.a(paramd, this.j.get(((m)localObject1).a()));
      this.k.a(paramd, this.k.get(((m)localObject1).a()));
      localObject2 = (a.c.ab)this.j.get(paramd);
      localObject3 = ((a.c.ab)localObject2).d(((m)localObject1).a());
      ((a.c.ab)localObject2).a(paramd, (v)localObject3);
      do
      {
        do
        {
          if (!((m)localObject1).e()) {
            break;
          }
          if (((m)localObject1).a() == ((a.c.ab)localObject2).g((v)localObject3))
          {
            localObject4 = ((a.c.ab)localObject2).c((v)localObject3);
            ((a.c.ab)localObject2).h((v)localObject3);
            localObject3 = localObject4;
            if (bool) {
              continue;
            }
            if (i1 == 0) {}
          }
          else
          {
            throw new RuntimeException("WRONG SEGMENTS IN EDGE RECOVERY");
          }
          ((m)localObject1).f();
        } while (i1 == 0);
      } while (bool);
      if (!bool)
      {
        if (((a.c.ab)localObject2).size() == 1)
        {
          this.l.remove(paramd);
          o(paramd);
        }
      }
      else if (i1 == 0) {}
    }
    else
    {
      throw new RuntimeException("UNSPECIFIED EDGE RECOVERY");
    }
  }
  
  public void o()
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    a.f.o localo = (a.f.o)this.a;
    z localz1 = new z();
    Object localObject = this.l.l();
    if (((m)localObject).e()) {}
    label115:
    while (bool)
    {
      localz1.clear();
      d locald = ((m)localObject).a();
      r(locald);
      if (bool) {
        break label297;
      }
      m localm = ((a.c.ab)this.j.get(locald)).l();
      if (i1 != 0) {
        break label296;
      }
      if (!bool)
      {
        if (localm != null)
        {
          if (bool) {
            break label281;
          }
          if (localm.e())
          {
            if (localm.e()) {}
            do
            {
              z localz2 = localo.m(localm.a());
              localz1.a(localz2);
              if (i1 != 0) {
                break;
              }
              if (e(localm.a().f())) {
                localz1.add(localo.o(localm.a().f()));
              }
              localm.f();
              if (i1 == 0) {
                break label115;
              }
              localo.b(locald, localz1);
              localm.h();
              localo.a(locald, localo.p(localm.a()));
              localm.i();
            } while (bool);
            localo.b(locald, localo.q(localm.a()));
          }
        }
        this.j.a(((m)localObject).a(), null);
      }
      else
      {
        ((m)localObject).f();
      }
      if (i1 == 0) {
        break;
      }
    }
    label281:
    this.l.clear();
    label296:
    label297:
    localObject = this.a.v();
    if (((w)localObject).e()) {
      if (!bool) {
        if (!b(((w)localObject).d()))
        {
          if (bool) {
            break label367;
          }
          if (!e(((w)localObject).d())) {
            break label359;
          }
        }
      }
    }
    label359:
    label367:
    while (bool)
    {
      j(((w)localObject).d());
      ((w)localObject).f();
      if (i1 == 0) {
        break;
      }
    }
  }
  
  public void a(a.c.ab paramab)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    m localm = paramab.l();
    label182:
    label249:
    label251:
    do
    {
      do
      {
        if (!localm.e()) {
          return;
        }
        v localv = this.l.d(localm.a());
        if (!bool)
        {
          if (localv == null) {
            k(localm.a());
          }
        }
        else {
          if (i1 == 0) {
            continue;
          }
        }
        bb localbb = new bb();
        a.c.ab localab = (a.c.ab)this.j.get(localm.a());
        do
        {
          this.l.h(localv);
          localObject = localab.l();
          do
          {
            if (!((m)localObject).e()) {
              break label182;
            }
            d locald = ((m)localObject).a();
            k(locald);
            if (i1 != 0) {
              break;
            }
            if (locald.f() != localm.a().f()) {
              localbb.add(((m)localObject).a().f());
            }
            ((m)localObject).f();
          } while (i1 == 0);
        } while (bool);
        Object localObject = localbb.l();
        do
        {
          if (!((w)localObject).e()) {
            break;
          }
          h(((w)localObject).d());
          ((w)localObject).f();
          if (bool) {
            break label251;
          }
          if (i1 != 0) {
            break label249;
          }
        } while (i1 == 0);
      } while (bool);
      localm.f();
    } while (i1 == 0);
  }
  
  public void o(d paramd)
  {
    p(paramd).b(true);
  }
  
  protected b_ i(e parame)
  {
    b_ localb_ = (b_)this.m.get(parame);
    if (!ab.g) {
      if (localb_ == null)
      {
        localb_ = p();
        this.m.a(parame, localb_);
      }
    }
    return localb_;
  }
  
  protected b_ p()
  {
    return new b_();
  }
  
  protected a_ p(d paramd)
  {
    return (a_)i(paramd);
  }
  
  protected a_ q()
  {
    return new a_();
  }
  
  protected ab.b_ m()
  {
    return q();
  }
  
  private void q(d paramd)
  {
    boolean bool = ab.g;
    if (!bool) {
      if (p(paramd).c())
      {
        if (bool) {
          break label42;
        }
        this.a.f(paramd);
        if (ab.f == 0) {
          return;
        }
      }
    }
    label42:
    this.a.a(paramd);
  }
  
  private void r(d paramd)
  {
    if (!ab.g)
    {
      if (p(paramd).c()) {
        this.a.g(paramd);
      }
    }
    else if (ab.f == 0) {
      return;
    }
    throw new RuntimeException("Tried to reinsert non-original edge !");
  }
  
  private void j(e parame)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    m localm = parame.l();
    if (localm.e()) {}
    while (bool)
    {
      q(localm.a());
      localm.f();
      if ((!bool) && (i1 != 0)) {
        return;
      }
      if (i1 == 0) {
        break;
      }
    }
    this.a.a(parame);
  }
  
  public void r()
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    boolean[] arrayOfBoolean = new boolean[this.a.m()];
    m localm1 = this.l.l();
    d locald1;
    label252:
    do
    {
      do
      {
        if (!localm1.e()) {
          break;
        }
        locald1 = localm1.a();
        a.c.ab localab = (a.c.ab)this.j.get(locald1);
        if (i1 != 0) {
          break label318;
        }
        if (!bool) {
          if (localab.m().e() != locald1.e()) {
            throw new RuntimeException("Path has wrong source !!");
          }
        }
        if (localab.n().f() != locald1.f()) {
          throw new RuntimeException("Path has wrong target !!");
        }
        Object localObject = null;
        m localm2 = localab.l();
        do
        {
          do
          {
            if (!localm2.e()) {
              break label274;
            }
            d locald2 = localm2.a();
            if (i1 != 0) {
              break;
            }
            if (this.k.get(locald2) != locald1) {
              throw new RuntimeException("Wrong backlink in segmentsToEdge : " + locald1);
            }
            if (!bool) {
              if (localObject != null)
              {
                if (bool) {
                  break label252;
                }
                if (localObject.f() != locald2.e()) {
                  throw new RuntimeException("Recovery info is no path :" + locald1);
                }
              }
            }
            localObject = locald2;
            arrayOfBoolean[locald2.d()] = true;
            localm2.f();
          } while (i1 == 0);
          localm1.f();
        } while (bool);
      } while (i1 == 0);
    } while (bool);
    label274:
    localm1 = this.a.w();
    label318:
    do
    {
      if (!localm1.e()) {
        break;
      }
      locald1 = localm1.a();
      if ((bool) || (!h(locald1)))
      {
        if (bool) {
          continue;
        }
        if (!p(locald1).c())
        {
          if (bool) {
            continue;
          }
          if (arrayOfBoolean[locald1.d()] == 0) {
            throw new RuntimeException("Edge " + locald1 + " is contained in no path");
          }
        }
      }
      localm1.f();
    } while (i1 == 0);
  }
  
  public void a(boolean paramBoolean)
  {
    boolean bool = ab.g;
    int i1 = ab.f;
    m localm2 = this.l.l();
    a.i.n.a(0, "Edge recovery info:");
    d locald;
    if (!bool) {
      if (paramBoolean) {
        label170:
        label172:
        do
        {
          if (!localm2.e()) {
            break;
          }
          locald = localm2.a();
          m localm1 = ((a.c.ab)this.j.get(locald)).l();
          do
          {
            do
            {
              if (!localm1.e()) {
                break;
              }
              a.i.n.a(0, "    segment: " + localm1.a() + " org. Edge: " + (d)this.k.get(localm1.a()));
              localm1.f();
              if (bool) {
                break label172;
              }
              if (i1 != 0) {
                break label170;
              }
            } while (i1 == 0);
          } while (bool);
          localm2.f();
        } while (i1 == 0);
      }
    }
    do
    {
      if (!localm2.e()) {
        break;
      }
      locald = localm2.a();
      a.c.ab localab = (a.c.ab)this.j.get(locald);
      a.i.n.a(0, "edge: " + locald + " segments: " + localab);
      localm2.f();
    } while (i1 == 0);
  }
  
  public static class a_
    extends ab.b_
  {
    private boolean f;
    public static boolean g;
    
    boolean c()
    {
      return this.f;
    }
    
    void b(boolean paramBoolean)
    {
      this.f = paramBoolean;
    }
  }
  
  public static class b_
  {
    private int a = 0;
    public static boolean b;
    
    int a()
    {
      return this.a;
    }
    
    void a(int paramInt)
    {
      this.a = paramInt;
    }
  }
}



/* Location:           E:\idea\

 * Qualified Name:     a.f.j.cb

 * JD-Core Version:    0.7.0.1

 */